(function($){ var NivoSlider=function(element, options){ var settings=$.extend({}, $.fn.nivoSlider.defaults, options); var vars={ currentSlide: 0, currentImage: '', totalSlides: 0, running: false, paused: false, stop: false, controlNavEl: false }; var slider=$(element); slider.data('nivo:vars', vars).addClass('nivoSlider'); var kids=slider.children(); kids.each(function(){ var child=$(this); var link=''; if(!child.is('img')){ if(child.is('a')){ child.addClass('nivo-imageLink'); link=child; } child=child.find('img:first'); } var childWidth=(childWidth===0) ? child.attr('width'):child.width(), childHeight=(childHeight===0) ? child.attr('height'):child.height(); if(link!==''){ link.css('display','none'); } child.css('display','none'); vars.totalSlides++; }); if(settings.randomStart){ settings.startSlide=Math.floor(Math.random() * vars.totalSlides); } if(settings.startSlide > 0){ if(settings.startSlide >=vars.totalSlides){ settings.startSlide=vars.totalSlides - 1; } vars.currentSlide=settings.startSlide; } if($(kids[vars.currentSlide]).is('img')){ vars.currentImage=$(kids[vars.currentSlide]); }else{ vars.currentImage=$(kids[vars.currentSlide]).find('img:first'); } if($(kids[vars.currentSlide]).is('a')){ $(kids[vars.currentSlide]).css('display','block'); } var sliderImg=$(''); sliderImg.attr('src', vars.currentImage.attr('src')).show(); slider.append(sliderImg); $(window).resize(function(){ slider.children('img').width(slider.width()); sliderImg.attr('src', vars.currentImage.attr('src')); sliderImg.stop().height('auto'); $('.nivo-slice').remove(); $('.nivo-box').remove(); }); slider.append($('
')); var processCaption=function(settings){ var nivoCaption=$('.nivo-caption', slider); if(vars.currentImage.attr('title')!=''&&vars.currentImage.attr('title')!=undefined){ var title=vars.currentImage.attr('title'); if(title.substr(0,1)=='#') title=$(title).html(); if(nivoCaption.css('display')=='block'){ setTimeout(function(){ nivoCaption.html(title); }, settings.animSpeed); }else{ nivoCaption.html(title); nivoCaption.stop().fadeIn(settings.animSpeed); }}else{ nivoCaption.stop().fadeOut(settings.animSpeed); }} processCaption(settings); var timer=0; if(!settings.manualAdvance&&kids.length > 1){ timer=setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); } if(settings.directionNav){ slider.append('
'+ settings.prevText +''+ settings.nextText +'
'); $('a.nivo-prevNav', slider).live('click', function(){ if(vars.running){ return false; } clearInterval(timer); timer=''; vars.currentSlide -=2; nivoRun(slider, kids, settings, 'prev'); }); $('a.nivo-nextNav', slider).live('click', function(){ if(vars.running){ return false; } clearInterval(timer); timer=''; nivoRun(slider, kids, settings, 'next'); }); } if(settings.controlNav){ vars.controlNavEl=$('
'); slider.after(vars.controlNavEl); for(var i=0; i < kids.length; i++){ if(settings.controlNavThumbs){ vars.controlNavEl.addClass('nivo-thumbs-enabled'); var child=kids.eq(i); if(!child.is('img')){ child=child.find('img:first'); } if(child.attr('data-thumb')) vars.controlNavEl.append(''); }else{ vars.controlNavEl.append(''+ (i + 1) +''); }} $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active'); $('a', vars.controlNavEl).bind('click', function(){ if(vars.running) return false; if($(this).hasClass('active')) return false; clearInterval(timer); timer=''; sliderImg.attr('src', vars.currentImage.attr('src')); vars.currentSlide=$(this).attr('rel') - 1; nivoRun(slider, kids, settings, 'control'); }); } if(settings.pauseOnHover){ slider.hover(function(){ vars.paused=true; clearInterval(timer); timer=''; }, function(){ vars.paused=false; if(timer===''&&!settings.manualAdvance){ timer=setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); }}); } slider.bind('nivo:animFinished', function(){ sliderImg.attr('src', vars.currentImage.attr('src')); vars.running=false; $(kids).each(function(){ if($(this).is('a')){ $(this).css('display','none'); }}); if($(kids[vars.currentSlide]).is('a')){ $(kids[vars.currentSlide]).css('display','block'); } if(timer===''&&!vars.paused&&!settings.manualAdvance){ timer=setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); } settings.afterChange.call(this); }); var createSlices=function(slider, settings, vars){ if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block'); $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); var sliceHeight=($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height():$('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height(); for(var i=0; i < settings.slices; i++){ var sliceWidth=Math.round(slider.width()/settings.slices); if(i===settings.slices-1){ slider.append($('
').css({ left:(sliceWidth*i)+'px', width:(slider.width()-(sliceWidth*i))+'px', height:sliceHeight+'px', opacity:'0', overflow:'hidden' }) ); }else{ slider.append($('
').css({ left:(sliceWidth*i)+'px', width:sliceWidth+'px', height:sliceHeight+'px', opacity:'0', overflow:'hidden' }) ); }} $('.nivo-slice', slider).height(sliceHeight); sliderImg.stop().animate({ height: $(vars.currentImage).height() }, settings.animSpeed); }; var createBoxes=function(slider, settings, vars){ if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block'); $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); var boxWidth=Math.round(slider.width()/settings.boxCols), boxHeight=Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows); for(var rows=0; rows < settings.boxRows; rows++){ for(var cols=0; cols < settings.boxCols; cols++){ if(cols===settings.boxCols-1){ slider.append($('
').css({ opacity:0, left:(boxWidth*cols)+'px', top:(boxHeight*rows)+'px', width:(slider.width()-(boxWidth*cols))+'px' }) ); $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px'); }else{ slider.append($('
').css({ opacity:0, left:(boxWidth*cols)+'px', top:(boxHeight*rows)+'px', width:boxWidth+'px' }) ); $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px'); }} } sliderImg.stop().animate({ height: $(vars.currentImage).height() }, settings.animSpeed); }; var nivoRun=function(slider, kids, settings, nudge){ var vars=slider.data('nivo:vars'); if(vars&&(vars.currentSlide===vars.totalSlides - 1)){ settings.lastSlide.call(this); } if((!vars||vars.stop)&&!nudge){ return false; } settings.beforeChange.call(this); if(!nudge){ sliderImg.attr('src', vars.currentImage.attr('src')); }else{ if(nudge==='prev'){ sliderImg.attr('src', vars.currentImage.attr('src')); } if(nudge==='next'){ sliderImg.attr('src', vars.currentImage.attr('src')); }} vars.currentSlide++; if(vars.currentSlide===vars.totalSlides){ vars.currentSlide=0; settings.slideshowEnd.call(this); } if(vars.currentSlide < 0){ vars.currentSlide=(vars.totalSlides - 1); } if($(kids[vars.currentSlide]).is('img')){ vars.currentImage=$(kids[vars.currentSlide]); }else{ vars.currentImage=$(kids[vars.currentSlide]).find('img:first'); } if(settings.controlNav){ $('a', vars.controlNavEl).removeClass('active'); $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active'); } processCaption(settings); $('.nivo-slice', slider).remove(); $('.nivo-box', slider).remove(); var currentEffect=settings.effect, anims=''; if(settings.effect==='random'){ anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade', 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse'); currentEffect=anims[Math.floor(Math.random()*(anims.length + 1))]; if(currentEffect===undefined){ currentEffect='fade'; }} if(settings.effect.indexOf(',')!==-1){ anims=settings.effect.split(','); currentEffect=anims[Math.floor(Math.random()*(anims.length))]; if(currentEffect===undefined){ currentEffect='fade'; }} if(vars.currentImage.attr('data-transition')){ currentEffect=vars.currentImage.attr('data-transition'); } vars.running=true; var timeBuff=0, i=0, slices='', firstSlice='', totalBoxes='', boxes=''; if(currentEffect==='sliceDown'||currentEffect==='sliceDownRight'||currentEffect==='sliceDownLeft'){ createSlices(slider, settings, vars); timeBuff=0; i=0; slices=$('.nivo-slice', slider); if(currentEffect==='sliceDownLeft'){ slices=$('.nivo-slice', slider)._reverse(); } slices.each(function(){ var slice=$(this); slice.css({ 'top': '0px' }); if(i===settings.slices-1){ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + timeBuff)); }else{ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed); }, (100 + timeBuff)); } timeBuff +=50; i++; }); }else if(currentEffect==='sliceUp'||currentEffect==='sliceUpRight'||currentEffect==='sliceUpLeft'){ createSlices(slider, settings, vars); timeBuff=0; i=0; slices=$('.nivo-slice', slider); if(currentEffect==='sliceUpLeft'){ slices=$('.nivo-slice', slider)._reverse(); } slices.each(function(){ var slice=$(this); slice.css({ 'bottom': '0px' }); if(i===settings.slices-1){ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + timeBuff)); }else{ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed); }, (100 + timeBuff)); } timeBuff +=50; i++; }); }else if(currentEffect==='sliceUpDown'||currentEffect==='sliceUpDownRight'||currentEffect==='sliceUpDownLeft'){ createSlices(slider, settings, vars); timeBuff=0; i=0; var v=0; slices=$('.nivo-slice', slider); if(currentEffect==='sliceUpDownLeft'){ slices=$('.nivo-slice', slider)._reverse(); } slices.each(function(){ var slice=$(this); if(i===0){ slice.css('top','0px'); i++; }else{ slice.css('bottom','0px'); i=0; } if(v===settings.slices-1){ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + timeBuff)); }else{ setTimeout(function(){ slice.animate({opacity:'1.0' }, settings.animSpeed); }, (100 + timeBuff)); } timeBuff +=50; v++; }); }else if(currentEffect==='fold'){ createSlices(slider, settings, vars); timeBuff=0; i=0; $('.nivo-slice', slider).each(function(){ var slice=$(this); var origWidth=slice.width(); slice.css({ top:'0px', width:'0px' }); if(i===settings.slices-1){ setTimeout(function(){ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + timeBuff)); }else{ setTimeout(function(){ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed); }, (100 + timeBuff)); } timeBuff +=50; i++; }); }else if(currentEffect==='fade'){ createSlices(slider, settings, vars); firstSlice=$('.nivo-slice:first', slider); firstSlice.css({ 'width': slider.width() + 'px' }); firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); }); }else if(currentEffect==='slideInRight'){ createSlices(slider, settings, vars); firstSlice=$('.nivo-slice:first', slider); firstSlice.css({ 'width': '0px', 'opacity': '1' }); firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); }); }else if(currentEffect==='slideInLeft'){ createSlices(slider, settings, vars); firstSlice=$('.nivo-slice:first', slider); firstSlice.css({ 'width': '0px', 'opacity': '1', 'left': '', 'right': '0px' }); firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ firstSlice.css({ 'left': '0px', 'right': '' }); slider.trigger('nivo:animFinished'); }); }else if(currentEffect==='boxRandom'){ createBoxes(slider, settings, vars); totalBoxes=settings.boxCols * settings.boxRows; i=0; timeBuff=0; boxes=shuffle($('.nivo-box', slider)); boxes.each(function(){ var box=$(this); if(i===totalBoxes-1){ setTimeout(function(){ box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + timeBuff)); }else{ setTimeout(function(){ box.animate({ opacity:'1' }, settings.animSpeed); }, (100 + timeBuff)); } timeBuff +=20; i++; }); }else if(currentEffect==='boxRain'||currentEffect==='boxRainReverse'||currentEffect==='boxRainGrow'||currentEffect==='boxRainGrowReverse'){ createBoxes(slider, settings, vars); totalBoxes=settings.boxCols * settings.boxRows; i=0; timeBuff=0; var rowIndex=0; var colIndex=0; var box2Darr=[]; box2Darr[rowIndex]=[]; boxes=$('.nivo-box', slider); if(currentEffect==='boxRainReverse'||currentEffect==='boxRainGrowReverse'){ boxes=$('.nivo-box', slider)._reverse(); } boxes.each(function(){ box2Darr[rowIndex][colIndex]=$(this); colIndex++; if(colIndex===settings.boxCols){ rowIndex++; colIndex=0; box2Darr[rowIndex]=[]; }}); for(var cols=0; cols < (settings.boxCols * 2); cols++){ var prevCol=cols; for(var rows=0; rows < settings.boxRows; rows++){ if(prevCol >=0&&prevCol < settings.boxCols){ (function(row, col, time, i, totalBoxes){ var box=$(box2Darr[row][col]); var w=box.width(); var h=box.height(); if(currentEffect==='boxRainGrow'||currentEffect==='boxRainGrowReverse'){ box.width(0).height(0); } if(i===totalBoxes-1){ setTimeout(function(){ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); }); }, (100 + time)); }else{ setTimeout(function(){ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3); }, (100 + time)); }})(rows, prevCol, timeBuff, i, totalBoxes); i++; } prevCol--; } timeBuff +=100; }} }; var shuffle=function(arr){ for(var j, x, i=arr.length; i; j=parseInt(Math.random() * i, 10), x=arr[--i], arr[i]=arr[j], arr[j]=x); return arr; }; var trace=function(msg){ if(this.console&&typeof console.log!=='undefined'){ console.log(msg); }}; this.stop=function(){ if(!$(element).data('nivo:vars').stop){ $(element).data('nivo:vars').stop=true; trace('Stop Slider'); }}; this.start=function(){ if($(element).data('nivo:vars').stop){ $(element).data('nivo:vars').stop=false; trace('Start Slider'); }}; settings.afterLoad.call(this); return this; }; $.fn.nivoSlider=function(options){ return this.each(function(key, value){ var element=$(this); if(element.data('nivoslider')){ return element.data('nivoslider'); } var nivoslider=new NivoSlider(this, options); element.data('nivoslider', nivoslider); }); }; $.fn.nivoSlider.defaults={ effect: 'random', slices: 15, boxCols: 8, boxRows: 4, animSpeed: 500, pauseTime: 3000, startSlide: 0, directionNav: true, controlNav: true, controlNavThumbs: false, pauseOnHover: true, manualAdvance: false, prevText: 'Prev', nextText: 'Next', randomStart: false, beforeChange: function(){}, afterChange: function(){}, slideshowEnd: function(){}, lastSlide: function(){}, afterLoad: function(){}}; $.fn._reverse=[].reverse; })(jQuery);